package com.sevenluo.netty.learn.server.codec.handler;

import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.handler.timeout.IdleStateHandler;
import lombok.extern.slf4j.Slf4j;

/**
 * @author: 程序员七哥
 * @date: 2022-02-02
 * @description: 服务端空闲监测，10 秒接不到 channel 的请求就断开连接
 */
@Slf4j
public class ServerIdleCheckHandler extends IdleStateHandler {
    public ServerIdleCheckHandler() {
        super(10, 0, 0);
    }

    @Override
    protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception {
        // 如果是第一次读空闲，我们就关闭当前 channel 连接,不用再传播此事件
        if (evt == IdleStateEvent.FIRST_READER_IDLE_STATE_EVENT) {
            log.info("read idle check happen,so close this connection");
            ctx.close();
            return;
        }

        // 触发 idle 事件，在 pipeline 上传播
        super.channelIdle(ctx, evt);
    }
}
